{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 22\n",
    "\n",
    "# 平面向量\n",
    "Book_3《数学要素》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0a5c76bd-9ede-4699-8065-efaf63e04290",
   "metadata": {},
   "source": [
    "这段代码使用向量的可视化来展示二维平面上向量的分解与合成。具体来说，给定一个向量 $ \\vec{a} = [4, 3] $，代码将其表示为两个单位向量 $ \\vec{i} = [1, 0] $ 和 $ \\vec{j} = [0, 1] $ 的线性组合。根据向量的定义，$ \\vec{a} $ 可以表示为：\n",
    "\n",
    "$$\n",
    "\\vec{a} = 4 \\cdot \\vec{i} + 3 \\cdot \\vec{j}\n",
    "$$\n",
    "\n",
    "其中，$ 4 \\cdot \\vec{i} $ 表示 $ \\vec{i} $ 在 $ x $ 方向上被放大 4 倍，$ 3 \\cdot \\vec{j} $ 表示 $ \\vec{j} $ 在 $ y $ 方向上被放大 3 倍。因此，$ \\vec{a} $ 可以视为由这两个放大的向量组合而成。\n",
    "\n",
    "代码分步绘制了单位向量 $ \\vec{i} $ 和 $ \\vec{j} $ 及其放大版本 $ 4\\cdot\\vec{i} $ 和 $ 3\\cdot\\vec{j} $，并用颜色区分它们。最终，代码展示了合成的向量 $ \\vec{a} $，其终点坐标为 (4,3)。通过这些向量的分解与组合，我们可以观察到二维空间中向量的构成关系，并理解如何通过基向量来表示任意向量的位置。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a9802d9e-7c46-4d92-9974-9001f626fb78",
   "metadata": {},
   "source": [
    "## 导入包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1c3fe49d-3eb4-49c4-9339-20bf14cccd0a",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f656d5a-344a-4d94-bfb8-957ffeb0605d",
   "metadata": {},
   "source": [
    "## 从原点绘制向量的函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "e984b3b8-681b-40db-93e2-e4a1e36b5786",
   "metadata": {},
   "outputs": [],
   "source": [
    "def draw_vector(vector, RBG, label):  \n",
    "    array = np.array([[0, 0, vector[0], vector[1]]])  # 向量的起点与终点坐标\n",
    "    X, Y, U, V = zip(*array)\n",
    "    plt.quiver(X, Y, U, V, angles='xy', scale_units='xy', scale=1, color=RBG)  # 绘制向量\n",
    "    \n",
    "    # 添加标签显示向量坐标\n",
    "    label = label + f\" ({vector[0]},{vector[1]})\"\n",
    "    plt.annotate(label,  \n",
    "                 (vector[0], vector[1]),  \n",
    "                 textcoords=\"offset points\",  \n",
    "                 xytext=(0, 10),  \n",
    "                 ha='center')  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "78d3cd36-8dd3-4d45-a1ca-919438804e3a",
   "metadata": {},
   "source": [
    "## 定义向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3d1fd6bf-ed7b-415f-9d24-3186c0e71af1",
   "metadata": {},
   "outputs": [],
   "source": [
    "a = np.array([4, 3])  # 向量 a\n",
    "i = np.array([1, 0])  # 单位向量 i\n",
    "j = np.array([0, 1])  # 单位向量 j"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5e00e36b-e4e3-44ff-a1f8-912feacba209",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "86b40f87-dd53-42d8-b66a-1e550ef25f8e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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V7/6Vcp/n17xSqyLRJQw1h94GW/ufiT6+VeBoxg3DJyDiuKrM/75V7du3ZKOanrqqacwZcoUWK3f/lN6vV5897vfxQMPPBB9zOPxJDzbee211zBt2jQ8+OCD+PTTT3HRRRdh3Lhx2Lt3b3Sb8ePHo76+Hu+++66Kv0rfkuVELbIxp+rqaixYsADDhg1r97Pi4uKkn2s9/fTTuO2229o81prTfffdh9LSUlEdjz/+OJ544gnMnz8f1dXV6NWrF6644go0NjZGt7n55puxbt06bN++PcEzGUfr8lxpUQyuvr5eAaDUjxjRqb+nMXhYef3L+5WnNl0b/fr7P2crvlBDp/3OMWPGKPfcc0+HPz906JBisViULVu2xP35+++/rwBQjh07pjQ2NiqNjY0dPtc555yj3HnnnW0eO+OMM5QZM2a0eWzy5MnKxIkT5X+EwSTLiVpkW06NjY3KoEGDlFWrVsV93fXv31/5z//8zw73r6mpUaxWq1JfX9/ued944w3ljDPOULZu3aoAUD799NMOnycSiSi9evVSHnvssehjfr9fKSoqUv74xz+22baqqkqZOXOm+G/Us/3797e8j8fkJ8ErMYGu6j5M1QcffIDc3FyceeaZSbcNhUIIhUJxfxYMBlFTU4OxY8e2eXzs2LFYv359m8fOOeecdt2M2SRRTvStbMtp6tSpGD9+PC6//PK09l+7di1OO+00FBYWtnl8//79uOuuu/Bf//VfohGKu3fvRm1tbZvXotPpxJgxY7L6tajmWOLoxAT0Pvpwz5496NmzZ5uuxI4k6uo8fPgwwuEwevbs2ebxnj17ora2ts1jffr0wd69exGJRES/12j0MiVC77IppyVLlmDjxo2orq5O+zn27NnTrrtQURRMnToVt956KyorK7Fnz56kz9P6eov3Wvzqq6/aPNanTx/RcxqBmuOJjVgH9D55GWi5fYHL5RJtm05DpyhKu8fcbjcikQgCgYCqCYp6lY0Nc2fIlpz27duHe+65BytXrhS/luKJ91p8+umn0dTUhF/84hcpP5/0tajqsyQdUXM8ZceRmGF67T6M1aNHDxw7dky0baLunx49esBms7W76qqrq2t3Rnj06FHk5uZmZQMGZF83WWfJlpxqampQV1eHkSNHwm63w263Y82aNXjqqadgt9vFq6vHey2+9957qK6uRnFxMex2OwYO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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots()\n",
    "\n",
    "draw_vector(4*i, np.array([0, 112, 192])/255, '4i')  # 绘制 4i 向量\n",
    "draw_vector(3*j, np.array([255, 0, 0])/255, '3j')    # 绘制 3j 向量\n",
    "\n",
    "draw_vector(i, np.array([0, 112, 192])/255, 'i')     # 绘制单位向量 i\n",
    "draw_vector(j, np.array([255, 0, 0])/255, 'j')       # 绘制单位向量 j\n",
    "\n",
    "draw_vector(a, np.array([146, 208, 80])/255, 'a')    # 绘制向量 a\n",
    "\n",
    "plt.xlabel('$x$')  # 设置 x 轴标签\n",
    "plt.ylabel('$y$')  # 设置 y 轴标签\n",
    "\n",
    "plt.axis('scaled')\n",
    "ax.set_xlim([0, 5])  # 设置 x 轴范围\n",
    "ax.set_ylim([0, 5])  # 设置 y 轴范围\n",
    "ax.grid(linestyle='--', linewidth=0.25, color=[0.5, 0.5, 0.5])  # 设置网格线\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
